iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 11
0

今天在處理Sentry的相關功能時,發現一個問題
原本使用的Sentry方法captureException(),總是將錯誤繼承Error等級,這讓我有點困擾。
有些可能是小問題,不需要用到Error等級,於是做了點研究。就當作今天要發的文章囉。

要如何實作出不同等級的Log送到Sentry能夠是對應的Level的方式

Sentry的Lib有個capture()方法,他吃一個Event物件。

這個Event物件大概能夠擁有這麼多種資訊欄位可以填:

const Event({
  this.loggerName,
  this.serverName,
  this.release,
  this.environment,
  this.message,
  this.transaction,
  this.exception,
  this.stackTrace,
  this.level,
  this.culprit,
  this.tags,
  this.extra,
  this.fingerprint,
  this.userContext,
  this.contexts,
  this.breadcrumbs,
});

其中我們要看的是 this.level
this.level 是SeverityLevel型別。
他一共有5種狀態,如下:

class SeverityLevel {
  static const fatal = SeverityLevel._('fatal');
  static const error = SeverityLevel._('error');
  static const warning = SeverityLevel._('warning');
  static const info = SeverityLevel._('info');
  static const debug = SeverityLevel._('debug');
}

同時他有個方法叫做capture,我們可以在這傳遞Event進去。

Future<SentryResponse> capture({
  @required Event event,
  StackFrameFilter stackFrameFilter,
})

因此我們要做的事就很簡單了,在原本使用captureException()的類別底下建立一個方法,他吃幾種參數,

static func({String message, dynamic error, StackTrace stackTrace, SeverityLevel level}) 
{}

原本慣用的Logger實作類在乎叫這方法時,多傳遞一個level參數進去,如此一來就可在
logger.info() ,
logger.warning() ,
logger.error() ,
logger.fatal()
這些情境下將不同程度的log訊息記成不同等級的Sentry Issue Level了。

額外附上一些資訊。

Sentry 的 Issue 狀態有三種。

  1. Unresolved
    • Event剛被送來Sentry時的預設狀態。
  2. Resolved
    • Issue被解決時,便可以將它切成Resolved
    • 一但往後又發生同樣的Issue,狀態便會回到Unresolved。 官方稱它為回歸(regression)
    • Issue會經由這三種可能轉換成Resolved
      • 手動將它切成Resolved
      • 提交具有相同Issue ID的修復
      • Resolved可以設定自動Resolved的時間,Issue存在過久就自動被Resolved
  3. Ignored
    • 被Ignored的Issue將不會再發送警報
    • 被Ignored的Issue也不會出現在所有Issue清單中
    • 但可以透過搜尋is:ignored來找到他們
    • 不會再收到任何關於他狀態更改的通知
    • Ignored的Issue仍然會繼續佔用空間並持續累加

參考資料

Other Notifications | Sentry Documentation
Helper class to send event to sentry · GitHub


上一篇
[D10] : Yaml File on GitLab CI
下一篇
[D12] : Sentry不是在做Logging !
系列文
Re : 從懶開始的自動化生活30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言